package com.xiefengf.rabbitmq.consumer.service;

import com.xiefengf.rabbitmq.consumer.utils.StringUtils;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author xiefengf
 * @version 1.0
 * @date 2024/2/3 21:31
 *
 * 批量消费消息类
 */
@Service
public class BatchConsumerService {

    /**
     * 默认消费方式（用于测试批量发送消息）
     * @param msg
     */
//    @RabbitListener(queues = {StringUtils.DIRECT_BATCH_QUEUE_NAME})
//    @RabbitHandler
//    public void onMessage(@Payload String msg){
//        // 此处省略发邮件的逻辑
//        System.out.println("batch-----direct--------->" + msg);
//    }

//    /**
//     * 批量消费方式 一
//     * @param messages
//     */
//    @RabbitListener(queues = {StringUtils.DIRECT_BATCH_QUEUE_NAME},
//            containerFactory = "consumerBatchContainerFactory1")
//    @RabbitHandler
//    public void onMessage1(@Payload List<String> messages){
//        System.out.println("batch1-----direct--------->" + messages);
//        System.out.println("batch1-----size--------->" + messages.size());
//    }


    /**
     * 批量消费方式 二
     * 注：这里一定要注意，发送放不能批量发送，要普通发送才能触发这种批量消费。（小坑）
     * @param messages
     */
    @RabbitListener(queues = {StringUtils.DIRECT_BATCH_QUEUE_NAME},
            containerFactory = "consumerBatchContainerFactory2")
    @RabbitHandler
    public void onMessage2(@Payload List<String> messages){
        System.out.println("batch2-----direct--------->" + messages);
        System.out.println("batch2-----size--------->" + messages.size());
    }

}
